The present invention relates to methods and apparatus for transferring data within a multi-processing system.
In recent years, there has been an insatiable desire for faster computer processing data throughputs because cutting-edge computer applications involve real-time, multimedia functionality. Graphics applications are among those that place the highest demands on a processing system because they require such vast numbers of data accesses, data computations, and data manipulations in relatively short periods of time to achieve desirable visual results. These applications require extremely fast processing speeds, such as many thousands of megabits of data per second. While some processing systems employ a single processor to achieve fast processing speeds, others are implemented utilizing multi-processor architectures. In multi-processor systems, a plurality of sub-processors can operate in parallel (or at least in concert) to achieve desired processing results.
A significant part of a processing system is the formation and management of the stack. In a conventional processing system, a stack frame is formed in memory to store program information when a function call is made. A typical stack frame includes a general register save area, a local variable save area, a parameter list area, a link register save area and a back chain save area. The general register save area is used to store the data of the calling function contained in the general registers of the processing system. The local variable save area is used to store the variable data of the calling function contained in memory of the processing system. The parameter list area is used to store data of the calling function that is to be passed to the called function. The link register save area is used to store the value of the link register so that the return address may be re-established when the calling function is completed. The back chain save area is used to store a pointer value to the back chain of a prior stack frame.
The problem with the conventional approach to managing the stack in the conventional processing system is that the stack can grow significantly and take up valuable space in the memory of the processing system. In processing systems having relatively small local memories, the uncontrolled growth of the stack may be problematic. Conventional stack allocation techniques employing memory management hardware can start with a small stack space and add pages when the stack outgrows the stack space. Although these techniques permit freeing inactive pages of the stack, they cannot control the growth of the total address space consumed by all the stack modules.